package com.shuigu.pojo.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Objects;

@Data
@TableName("ums_role")
public class UmsRole implements Serializable,Comparable<UmsRole> {

    @TableId(type = IdType.AUTO)
    private Long roleId;

    private String roleLabel;
    private String roleName;
    private Integer sort;
    private Integer status;

    private String createUser;
    private String updateUser;
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    private String remark;
    // 逻辑删除，MyBatis-Plus默认0是未删除，1是已删除
    @TableLogic
    private Integer deleted;

    // 希望Set集合认为2个相同的对是重复的，就重写Object对象的下面两个方法。
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || this.getClass() != o.getClass()) return false;
        UmsRole umsRole = (UmsRole) o;
        return Objects.equals(roleId, umsRole.roleId) && Objects.equals(roleLabel, umsRole.roleLabel) && Objects.equals(roleName, umsRole.roleName) && Objects.equals(sort, umsRole.sort) && Objects.equals(status, umsRole.status) && Objects.equals(createUser, umsRole.createUser) && Objects.equals(updateUser, umsRole.updateUser) && Objects.equals(createTime, umsRole.createTime) && Objects.equals(updateTime, umsRole.updateTime) && Objects.equals(remark, umsRole.remark) && Objects.equals(deleted, umsRole.deleted);
    }

    @Override
    public int hashCode() {
        return Objects.hash(roleId, roleLabel, roleName, sort, status, createUser, updateUser, createTime, updateTime, remark, deleted);
    }


    // TreeSet集合给自定义对象排序，指定大小比较规则
    // t1 == o 被比较者
    // 规定1:如果你认为左边大于右边，请返回正整数
    // 规定2:如果你认为左边小于右边，请返回负整数
    // 规定3：如果你认为左边等于右边，请返回0
    // 默认就会升序
    // 方案1: 实现Comparable接口，重写compareTo方法
    @Override
    public int compareTo(UmsRole o) {
//        if (this.sort > o.sort) return 1;
//        if (this.sort < o.sort) return -1;
//        return 0;
//        return this.getSort() - o.getSort(); //升序
        return o.getSort() - this.getSort(); // 降序
    }

    // 方案2: 使用TreeSet自带的比较器Comparator对象，指定比较规则
    // 例
//    Set<Teacher> teachers = new TreeSet<>(new Comparator<Teacher>(){
//        public int compare(Teacher o1, Teacher o2){
//            // return o2.getAge() - o1.getAge(); // 降序
////            if(o1.getSalary() > o2.getSalary()){
////                return 1;
////            }else if(o1.getSalary() < o2.getSalary()){
////                return -1;
////            }
////            return 0;
//            // return Double.compare(o1.getSalary(), o2.getSalary()) // 薪水升序
//            return Double.compare(o2.getSalary(), o1.getSalary()); // 薪水降序
//        }
//    });
    // 方案2简化（lambda表达式）
    //Set<Teacher> teachers = new TreeSet<>((o1, o2) -> Double.compare(o1.getSalary(), o2.getSalary())); // 排序


}
